package com.bytedance.danmaku.render.engine.demo.danmu

import android.graphics.Bitmap
import com.bytedance.danmaku.render.engine.DanmakuView
import com.bytedance.danmaku.render.engine.control.DanmakuConfig
import com.bytedance.danmaku.render.engine.data.DanmakuData
import com.bytedance.danmaku.render.engine.render.draw.IDrawItemFactory
import com.bytedance.danmaku.render.engine.touch.IItemClickListener

/**
 * 弹幕管理器
 * Created by Yanxin on 2025/9/1
 * 弹幕库地址:https://github.com/bytedance/DanmakuRenderEngine
 * 弹幕公共配置getDanmakuStroll.config.common
 * 文字配置getDanmakuStroll.config.text
 * 滚动弹幕配置getDanmakuStroll.config.scroll
 * 位置弹幕配置getDanmakuStroll.config.top/bottom
 */
class DanmakuManager(private val danmakuView: IDanmakuView) {
    fun init(container: DanmakuView) {
        danmakuView.init(container)
    }

    fun isShowDanmakuView(): Boolean {
        return danmakuView.isShowDanmakuView()
    }

    fun showDanmakuView() {
        danmakuView.showDanmakuView()
    }

    fun hideDanmakuView() {
        danmakuView.hideDanmakuView()
    }

    fun loadDanmaku(danmakuList: List<DanmakuData>) {
        danmakuView.setData(danmakuList)
    }

    fun startDanmaku() {
        danmakuView.start()
    }

    fun pauseDanmaku() {
        danmakuView.pause()
    }

    fun resumeDanmaku(currentTime: Long = 0L) {
        danmakuView.resume(currentTime)
    }

    fun stopDanmaku() {
        danmakuView.stop()
    }

    /**
     * 发送弹幕  TextData 文字弹幕  默认文字图片组合DiggData点赞弹幕  BitmapData 图片弹幕
     */
    fun sendDanmaku(item: DanmakuData) {
        danmakuView.addDanmaku(item)
    }

    fun sendBitmapDanmakuData(
        bitmapWidth: Float = 50f,
        bitmapHeight: Float = 50f,
        resource: Bitmap,
    ) {
        danmakuView.sendBitmapDanmakuData(bitmapWidth, bitmapHeight, resource)
    }

    /**
     * 设置弹幕字体大小 最好36以上
     */
    fun setDanmakuTextSize(textSize: Float) {
        danmakuView.setTextSize(textSize)
    }

    /**
     * 指定时间显示弹幕
     * @param playTime 播放时间
     */
    fun seekTo(playTime: Long) {
        danmakuView.seekTo(playTime)
    }

    /**
     * 获取全局config 可修改 颜色 字体大小 透明度  间距  滚动速度 下划线 行高 行数
     */
    fun getDanmakuConfig(): DanmakuConfig? {
        return danmakuView.getDanmakuConfig()
    }

    /**
     * 获取弹幕滚动行配置
     * @return 弹幕滚动行配置 可修改滚动行数
     */
    fun getDanmakuStroll(): DanmakuConfig.ScrollLayerConfig? {
        return danmakuView.getDanmakuStroll()
    }

    fun setDanmakuSpeed(speed: Float) {
        danmakuView.setSpeed(speed)
    }

    fun setDanmakuAlpha(alpha: Float) {
        danmakuView.setAlpha(alpha)
    }

    fun setDanmakuLineCount(lineCount: Int) {
        danmakuView.setLineCount(lineCount)
    }

    fun sendTopDanmakuData(item: DanmakuData) {
        danmakuView.sendTopDanmakuData(item)
    }

    fun sendBottomDanmakuData(item: DanmakuData) {
        danmakuView.sendBottomDanmakuData(item)
    }

    fun setOnDanmakuClickListener(listener: IItemClickListener) {
        danmakuView.setOnDanmakuClickListener(listener)
    }

    fun clear() {
        danmakuView.clear()
    }

    fun release() {
        danmakuView.release()
    }

    fun registerDrawItemFactory(danmakuFactory: IDrawItemFactory) {
        danmakuView.registerDrawItemFactory(danmakuFactory)
    }
}